package com.yfp.operation.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yfp.common.core.web.page.TableDataInfo;
import com.yfp.operation.domain.MarCouponPack;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;
import com.yfp.operation.domain.dto.*;
import com.yfp.operation.domain.vo.*;

import java.util.List;

/**
 *
 * @description 针对表【mar_coupon_pack(优惠券礼包)】的数据库操作Service
 * @createDate 2024-09-25 10:37:51
 */
public interface MarCouponPackService extends IService<MarCouponPack> {

    /**
     * 创建优惠券礼包
     *
     * @param marCouponPack
     */
    void createCouponPack(MarCouponPackDTO marCouponPack);

    /**
     * 查询优惠券礼包活动列表
     *
     * @param marCouponPackReqDTO
     * @return
     */
    TableDataInfo<MarCouponPackVO> listCouponPack(MarCouponPackReqDTO marCouponPackReqDTO);

    /**
     * 查询优惠券礼包活动详情
     *
     * @param id
     * @return
     */
    MarCouponPackInfoVO getCouponPackById(Long id);


    /**
     * 查询详情
     * @param id
     * @return
     */
    MarCouponPack findById(Long id);

    /**
     * 查询详情
     * @param ids
     * @return
     */
    List<MarCouponPack> findByIds(List<Long> ids);

    /**
     * 更新优惠券礼包活动状态
     *
     * @param couponPackUpdateStatusReqDTO
     */
    void updateStatusById(MarCouponPackUpdateStatusReqDTO couponPackUpdateStatusReqDTO);

    /**
     * 更新优惠券礼包活动状态
     *
     * @param invalidMarCouponPackIds
     * @param status
     */
    void updateStatusByIds(List<Long> invalidMarCouponPackIds, Integer status);

    /**
     * 查询优惠券礼包详情列表
     *
     * @param id
     * @return
     */
    TableDataInfo<MarCouponPackDetailVO> listPackDetailById(Long id);

    /**
     * 查询已领取用户列表
     *
     * @param couponPackId
     * @return
     */
    TableDataInfo<MarCouponPackReceiveUserVO> listReceiveUserByReq(MarCouponPackReceiveUserReqDTO couponPackId);

    /**
     * 查询选择优惠券列表
     *
     * @param marCouponPackCouponReqDTO
     * @return
     */
    TableDataInfo<MarCouponPackCouponVO> listCouponByReq(MarCouponPackCouponReqDTO marCouponPackCouponReqDTO);

    /**
     * 计算优惠券礼包活动状态
     * 礼包失效条件：1：所有优惠券库存不足或失效时礼包失效、0：任意一张优惠券库存不足或失效时礼包失效
     *
     * @param failureCondition      失效条件
     * @param couponPackDetailsDTOS 优惠券集合。需要 优惠券id，赠券数 字段
     * @return 状态:[1:进行中,2:已失效]
     */
    Integer checkStatus(Integer failureCondition, List<MarCouponPackDetailsDTO> couponPackDetailsDTOS);

    /**
     * 检查所有优惠券礼包活动状态,并更新
     */
    void checkAndUpdateAllStatus();

    void updateSurplusCount(Long id, long l);
}
